package daily.oct1002;

/*
    字节输入流一次读取多个字节的方法:
        int read(byte[] b) 从输入流中读取一定数量的字节，并将其存储在缓冲区数组 b 中。
    明确两件事情:
        1.方法的参数byte[]的作用?
            起到缓冲作用,存储每次读取到的多个字节
            数组的长度一般定义为1024(1kb)或者1024的整数倍
        2.方法的返回值int是什么?
            每次读取的有效字节个数

    String类的构造方法
        String(byte[] bytes) :把字节数组转换为字符串
        String(byte[] bytes, int offset, int length) 把字节数组的一部分转换为字符串 offset:数组的开始索引 length:转换的字节个数
 */

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;

public class ReadMoreByteTest {
    public static void main(String[] args) throws IOException {
        //1.创建FileInputStream对象,构造方法中绑定要读取的数据源
        FileInputStream fis = new FileInputStream("src\\daily\\oct1001\\Out\\b.txt");
        //2.使用FileInputStream对象中的方法read,读取文件
        //int read(byte[] b) 从输入流中读取一定数量的字节，并将其存储在缓冲区数组 b 中。
        byte[] array0 = new byte[3];
        int dataQuantity = fis.read(array0);//3
        System.out.println(dataQuantity);
        //System.out.println(Arrays.toString(array));//打印ASCII码：65 66 67
        System.out.println(new String(array0));//直接打印字符：A B C

//        System.out.println(fis.read(array));//3
//        System.out.println(new String(array));//DE�
//        System.out.println(fis.read(array));//3
//        System.out.println(new String(array));//��D
//        System.out.println(fis.read(array));//3
//        System.out.println(new String(array));//EBC
//        System.out.println(fis.read(array));//3
//        System.out.println(new String(array));//D�
//        System.out.println(fis.read(array));//3
//        System.out.println(new String(array));//��
//        System.out.println(fis.read(array));//1
//        System.out.println(new String(array));//��
//        System.out.println(fis.read(array));//-1 读取结束
//        System.out.println(new String(array));//�� 不对数组进行覆盖

        /*
            发现以上读取时一个重复的过程,可以使用循环优化
            不知道文件中有多少字节,所以使用while循环
            while循环结束的条件,读取到-1结束
         */

        byte[] array1 = new byte[1024];
        while ((dataQuantity = fis.read(array1)) != -1) {
            System.out.println(new String(array1, 0, dataQuantity));
        }
        //3.释放资源
        fis.close();
    }
}
